home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / games.arc / TEXT.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  8.8 KB  |  398 lines

  1. 10  '********************************************************
  2. 20  '**                       TEXT                         **
  3. 30  '**              SINGLE-PAGE TEXT EDITOR               **
  4. 40  '**    VERS 1.1                           OCT, 1982    **
  5. 50  '********************************************************
  6. 60  '
  7. 70  CLEAR
  8. 80  SCREEN 0
  9. 90  COLOR 7,0,0
  10. 100  WIDTH 80
  11. 110  KEY OFF
  12. 120  DEFINT A-Z
  13. 130  OPTION BASE 1
  14. 140  DEF FNR = 20 * PAGE + ROW - 1
  15. 150  DEF FNC(X$)= X$<"0" OR (X$>"9" AND X$<"A") OR (X$>"Z" AND X$<"a") OR X$>"z"
  16. 160  DIM ARRAY$(60),TEMP$(60),MARK(60)
  17. 170  TABS$ = SPACE$(80)
  18. 180  MID$(TABS$,8,1)  = "T"                 ' Default tabs set
  19. 190  MID$(TABS$,50,1) = "T"                 ' at columns 8 and 50
  20. 200  TOP = 0
  21. 210  MID = 1
  22. 220  BOT = 2
  23. 230  LST = 3
  24. 240  LMARGIN = 0                            ' Spaces on left in printout
  25. 250  EDGE$ = STRING$(80,205)
  26. 260  MIDDLE$ = STRING$(80,176)
  27. 270  FOR PLACE = 1 TO 7
  28. 280  MID$(EDGE$,10 * PLACE,1) = CHR$(48 + PLACE)
  29. 290  MID$(MIDDLE$,10 * PLACE,1) = CHR$(48 + PLACE)
  30. 300  NEXT PLACE
  31. 310  '
  32. 320  FOR PAGE = TOP TO BOT                  ' Initialize the three screens
  33. 330  SCREEN 0,0,PAGE,0
  34. 340  CLS
  35. 350  LOCATE 1,1,1,7,7
  36. 360  IF PAGE = TOP THEN PRINT EDGE$ ELSE PRINT MIDDLE$
  37. 370  LOCATE 22,1,1,7,7
  38. 380  IF PAGE = BOT THEN PRINT EDGE$ ELSE PRINT MIDDLE$
  39. 390  LOCATE 24,3
  40. 400  PRINT "Alt-S Save text    Alt-I Insert line(s)    ";
  41. 410  PRINT "Alt-T Tab set    Alt-P Print text";
  42. 420  LOCATE 25,3
  43. 430  PRINT "Alt-L Load text    Alt-D Delete line(s)    ";
  44. 440  PRINT "Alt-C Clr tab    Alt-M Mark line";
  45. 450  NEXT PAGE
  46. 460  '
  47. 470  FOR I = 1 TO 60
  48. 480  ARRAY$(I) = SPACE$(80)
  49. 490  NEXT I
  50. 500  PAGE = TOP
  51. 510  SCREEN 0,0,PAGE,PAGE
  52. 520  ROW = 2
  53. 530  COL = 1
  54. 540  '
  55. 550  WHILE PFLAG                            ' Most functions return to here
  56. 560  LOCATE ROW,1
  57. 570  PRINT ARRAY$(FNR);
  58. 580  COL = INSTR(ARRAY$(FNR)," ")
  59. 590  PFLAG = 0
  60. 600  WEND
  61. 610  IF INSERT = 0 THEN LOCATE ROW,COL + (COL > 80),1,7,7
  62. 620  IF INSERT = 1 THEN LOCATE ROW,COL + (COL > 80),1,4,6
  63. 630  '
  64. 640  K$ = INKEY$                            ' Scan keyboard over and over
  65. 650  IF K$ = "" THEN 640
  66. 660  K = ASC(K$)
  67. 670  IF K = 0 THEN 1280                     ' Probably an Alt-key
  68. 680  '
  69. 690  IF K <> 3 THEN 730                     ' Ctrl-Break
  70. 700  CLS
  71. 710  END
  72. 720  '
  73. 730  IF K <> 8 THEN 780                     ' Back arrow
  74. 740  IF COL = 1 THEN 550
  75. 750  COL = COL - 1
  76. 760  GOTO 3010
  77. 770  '
  78. 780  IF K <> 9 THEN 860                     ' Tab
  79. 790  INSERT = 0
  80. 800  COL = COL - (COL < 80)
  81. 810  LOCATE ROW,COL,1,7,7
  82. 820  IF COL = 80 THEN 550
  83. 830  IF MID$(TABS$,COL,1) = " " THEN 800
  84. 840  GOTO 550
  85. 850  '
  86. 860  IF K <> 13 THEN 930                    ' Enter
  87. 870  INSERT = 0
  88. 880  COL = 1
  89. 890  ROW = ROW + 1
  90. 900  IF ROW > 21 THEN K$ = CHR$(0)+CHR$(81) : GOTO 1280
  91. 910  GOTO 550
  92. 920  '
  93. 930  IF K <> 27 THEN 1010                    ' Esc
  94. 940  INSERT = 0
  95. 950  ARRAY$(FNR) = SPACE$(80)
  96. 960  COL = 1
  97. 970  LOCATE ROW,COL,1,7,7
  98. 980  PRINT SPACE$(80);
  99. 990  GOTO 550
  100. 1000  '
  101. 1010  IF K < 32 OR K > 126 THEN 3810
  102. 1020  '
  103. 1030  IF INSERT = 0 THEN 1080                 ' Character
  104. 1040  ARRAY$(FNR) = LEFT$(ARRAY$(FNR),COL-1)+K$+MID$(ARRAY$(FNR),COL,80-COL)
  105. 1050  LOCATE ROW,1,0
  106. 1060  PRINT ARRAY$(FNR);
  107. 1070  GOTO 1230
  108. 1080  IF COL < 81 THEN 1210
  109. 1090  IF FNR = 60 THEN 1250
  110. 1100  SPP = 1
  111. 1110  ARRAY$(FNR) = LEFT$(ARRAY$(FNR),80)
  112. 1120  WHILE INSTR(SPP,ARRAY$(FNR)," ")
  113. 1130  SPP = INSTR(SPP,ARRAY$(FNR)," ") + 1
  114. 1140  WEND
  115. 1150  ARRAY$(FNR+1)= MID$(ARRAY$(FNR),SPP) + K$ +" "+ LEFT$(ARRAY$(FNR+1),SPP-3)
  116. 1160  ARRAY$(FNR) = LEFT$(ARRAY$(FNR),SPP-1) + SPACE$(81-SPP)
  117. 1170  LOCATE ROW,1,0
  118. 1180  PRINT ARRAY$(FNR);
  119. 1190  PFLAG = 1
  120. 1200  GOTO 890
  121. 1210  PRINT K$;
  122. 1220  MID$(ARRAY$(FNR),COL,1) = K$
  123. 1230  COL = COL + 1
  124. 1240  IF COL = 72 THEN SOUND 999,1
  125. 1250  IF COL > 80 THEN SOUND 777,3
  126. 1260  GOTO 550
  127. 1270  '
  128. 1280  K = ASC(RIGHT$(K$,1))                   ' Double byte INKEY$ codes
  129. 1290  IF K <> 15 THEN 1370                    ' Back tab
  130. 1300  INSERT = 0
  131. 1310  COL = COL + (COL > 1)
  132. 1320  LOCATE ROW,COL,1,7,7
  133. 1330  IF COL = 1 THEN 550
  134. 1340  IF MID$(TABS$,COL,1) = " " THEN 1310
  135. 1350  GOTO 550
  136. 1360  '
  137. 1370  IF K <> 20 THEN 1420                    ' Alt-T
  138. 1380  INSERT = 0
  139. 1390  MID$(TABS$,COL,1) = "T"
  140. 1400  GOTO 550
  141. 1410  '
  142. 1420  IF K <> 23 THEN 1860                    ' Alt-I
  143. 1430  INSERT = 0
  144. 1440  SCREEN 0,0,LST,LST
  145. 1450  CLS
  146. 1460  LOCATE 12,22
  147. 1470  BFLAG = 1
  148. 1480  FOR I = 1 TO 60
  149. 1490  IF MARK(I) THEN BFLAG = 0
  150. 1500  NEXT I
  151. 1510  IF BFLAG THEN 1770
  152. 1520  PRINT "Inserting marked lines ..."
  153. 1530  FUNROW = FNR
  154. 1540  FOR I = 1 TO 60
  155. 1550  TEMP$(I) = ARRAY$(I)
  156. 1560  NEXT I
  157. 1570  I = 0
  158. 1580  J = 0
  159. 1590  WHILE I < 60
  160. 1600  I = I + 1
  161. 1610  IF MARK(I) THEN FUNROW = FUNROW + (FUNROW > 1)
  162. 1620  IF I <> FUNROW THEN 1680
  163. 1630  FOR L = 1 TO 60
  164. 1640  IF MARK(L) = 0 THEN 1670
  165. 1650  ARRAY$(I) = TEMP$(L)
  166. 1660  I = I + 1
  167. 1670  NEXT L
  168. 1680  J = J + 1
  169. 1690  IF J > 60 THEN 1720
  170. 1700  IF MARK(J) THEN 1680
  171. 1710  ARRAY$(I) = TEMP$(J)
  172. 1720  WEND
  173. 1730  FOR I = 1 TO 60
  174. 1740  MARK(I) = 0
  175. 1750  NEXT I
  176. 1760  GOTO 1820
  177. 1770  PRINT "Inserting a blank line ..."
  178. 1780  FOR I = 59 TO FNR STEP -1
  179. 1790  ARRAY$(I+1) = ARRAY$(I)
  180. 1800  NEXT I
  181. 1810  ARRAY$(FNR) = SPACE$(80)
  182. 1820  GOSUB 3840
  183. 1830  SCREEN 0,0,PAGE,PAGE
  184. 1840  GOTO 550
  185. 1850  '
  186. 1860  IF K <> 25 THEN 1960                    ' Alt-P
  187. 1870  INSERT = 0
  188. 1880  FOR I = 1 TO 60
  189. 1890  LPRINT SPACE$(LMARGIN)+LEFT$(ARRAY$(I),80-LMARGIN);
  190. 1900  NEXT I
  191. 1910  LPRINT CHR$(12);
  192. 1920  SCREEN 0,0,PAGE,PAGE
  193. 1930  POKE 106,0
  194. 1940  GOTO 550
  195. 1950  '
  196. 1960  IF K <> 32 THEN 2260                    ' Alt-D
  197. 1970  INSERT = 0
  198. 1980  SCREEN 0,0,LST,LST
  199. 1990  CLS
  200. 2000  LOCATE 12,22
  201. 2010  BFLAG = 0
  202. 2020  FOR I = 1 TO 60
  203. 2030  IF MARK(I) THEN BFLAG = 1
  204. 2040  NEXT I
  205. 2050  IF BFLAG THEN 2090
  206. 2060  MARK(FNR) = 1
  207. 2070  PRINT "Deleting line at cursor ..."
  208. 2080  GOTO 2100
  209. 2090  PRINT "Deleting marked lines ..."
  210. 2100  FOR I = 1 TO 60
  211. 2110  WHILE MARK(I)
  212. 2120  FOR J = I TO 60
  213. 2130  IF J = 60 THEN 2170
  214. 2140  ARRAY$(J) = ARRAY$(J+1)
  215. 2150  MARK(J) = MARK(J+1)
  216. 2160  GOTO 2190
  217. 2170  ARRAY$(J) = SPACE$(80)
  218. 2180  MARK(J) = 0
  219. 2190  NEXT J
  220. 2200  WEND
  221. 2210  NEXT I
  222. 2220  GOSUB 3840
  223. 2230  SCREEN 0,0,PAGE,PAGE
  224. 2240  GOTO 550
  225. 2250  '
  226. 2260  IF K <> 46 THEN 2310                   ' Alt-C
  227. 2270  INSERT = 0
  228. 2280  MID$(TABS$,COL,1) = " "
  229. 2290  GOTO 550
  230. 2300  '
  231. 2310  IF K <> 50 THEN 2430                   ' Alt-M
  232. 2320  INSERT = 0
  233. 2330  RW = CSRLIN
  234. 2340  IF SCREEN(RW,1,1) MOD 17 = 7 THEN COLOR 0,7
  235. 2350  FOR CL = 1 TO 80
  236. 2360  LOCATE RW,CL
  237. 2370  PRINT CHR$(SCREEN(RW,CL));
  238. 2380  NEXT CL
  239. 2390  MARK(FNR) = (MARK(FNR) = 0)
  240. 2400  COLOR 7,0
  241. 2410  GOTO 550
  242. 2420  '
  243. 2430  IF K <> 71 THEN 2470                    ' Home
  244. 2440  INSERT = 0
  245. 2450  GOTO 520
  246. 2460  '
  247. 2470  IF K <> 72 THEN 2530                    ' cursor up
  248. 2480  INSERT = 0
  249. 2490  ROW = ROW - 1
  250. 2500  IF ROW < 2 THEN ROW = 2
  251. 2510  GOTO 550
  252. 2520  '
  253. 2530  IF K <> 73 THEN 2610                   ' PgUp
  254. 2540  INSERT = 0
  255. 2550  IF PAGE = TOP THEN SOUND 300,2
  256. 2560  IF PAGE = MID THEN PAGE = TOP
  257. 2570  IF PAGE = BOT THEN PAGE = MID
  258. 2580  SCREEN 0,0,PAGE,PAGE
  259. 2590  GOTO 520
  260. 2600  '
  261. 2610  IF K <> 75 THEN 2670                  ' Cursor left
  262. 2620  INSERT = 0
  263. 2630  COL = COL - 1
  264. 2640  IF COL < 1 THEN COL = 1
  265. 2650  GOTO 550
  266. 2660  '
  267. 2670  IF K <> 77 THEN 2730                  ' Cursor right
  268. 2680  INSERT = 0
  269. 2690  COL = COL + 1
  270. 2700  IF COL > 80 THEN COL = 80
  271. 2710  GOTO 550
  272. 2720  '
  273. 2730  IF K <> 79 THEN 2810                  ' End
  274. 2740  INSERT = 0
  275. 2750  COL = 80
  276. 2760  IF SCREEN(ROW,COL) <> 32 THEN 2690
  277. 2770  COL = COL - 1
  278. 2780  IF COL > 1 THEN 2760
  279. 2790  GOTO 550
  280. 2800  '
  281. 2810  IF K <> 80 THEN 2870                  ' Cursor down
  282. 2820  INSERT = 0
  283. 2830  ROW = ROW + 1
  284. 2840  IF ROW > 21 THEN ROW = 21
  285. 2850  GOTO 550
  286. 2860  '
  287. 2870  IF K <> 81 THEN 2950                  ' PgDn
  288. 2880  INSERT = 0
  289. 2890  IF PAGE = BOT THEN SOUND 300,2
  290. 2900  IF PAGE = MID THEN PAGE = BOT
  291. 2910  IF PAGE = TOP THEN PAGE = MID
  292. 2920  SCREEN 0,0,PAGE,PAGE
  293. 2930  GOTO 520
  294. 2940  '
  295. 2950  IF K <> 82 THEN 2990                  ' Ins
  296. 2960  INSERT = 1
  297. 2970  GOTO 550
  298. 2980  '
  299. 2990  IF K <> 83 THEN 3060                  ' Del
  300. 3000  INSERT = 0
  301. 3010  ARRAY$(FNR) = LEFT$(ARRAY$(FNR),COL-1)+MID$(ARRAY$(FNR),COL+1)+" "
  302. 3020  LOCATE ROW,1,0
  303. 3030  PRINT ARRAY$(FNR);
  304. 3040  GOTO 550
  305. 3050  '
  306. 3060  IF K <> 115 THEN 3200                 ' Ctrl-cursor left
  307. 3070  INSERT = 0
  308. 3080  TGA = 1
  309. 3090  TGB = 0
  310. 3100  LOCATE ROW,COL
  311. 3110  COL = COL + (COL > 1)
  312. 3120  IF COL = 1 THEN 3180
  313. 3130  T$ = MID$(ARRAY$(FNR),COL,1)
  314. 3140  IF FNC(T$) AND TGA = TGB THEN TGA = TGA + 1
  315. 3150  IF FNC(T$) = 0 AND TGA > TGB THEN TGB = TGB + 1
  316. 3160  IF TGA < 2 THEN 3100
  317. 3170  COL = COL + 1
  318. 3180  GOTO 550
  319. 3190  '
  320. 3200  IF K <> 116 THEN 3330                 ' Ctrl-cursor right
  321. 3210  INSERT = 0
  322. 3220  TGA = 0
  323. 3230  TGB = 0
  324. 3240  COL = COL - (COL < 80)
  325. 3250  LOCATE ROW,COL
  326. 3260  IF COL = 80 THEN 3310
  327. 3270  T$ = MID$(ARRAY$(FNR),COL,1)
  328. 3280  IF FNC(T$) = 0 AND TGA = TGB THEN TGA = TGA + 1
  329. 3290  IF FNC(T$) AND TGA > TGB THEN TGB = TGB + 1
  330. 3300  IF TGA < 2 THEN 3240
  331. 3310  GOTO 550
  332. 3320  '
  333. 3330  IF K <> 117 THEN 3390                 ' Ctrl-End
  334. 3340  INSERT = 0
  335. 3350  PRINT SPACE$(81-COL);
  336. 3360  ARRAY$(FNR) = LEFT$(ARRAY$(FNR),COL-1)+SPACE$(81-COL)
  337. 3370  GOTO 550
  338. 3380  '
  339. 3390  IF K <> 119 THEN 3430                 ' Ctrl-Home
  340. 3400  INSERT = 0
  341. 3410  GOTO 320
  342. 3420  '
  343. 3430  IF K <> 31 THEN 3590                  ' Alt-S
  344. 3440  INSERT = 0
  345. 3450  SCREEN 0,0,LST,LST
  346. 3460  CLS
  347. 3470  FILES
  348. 3480  PRINT
  349. 3490  INPUT "File name for save ";FILE$
  350. 3500  IF FILE$ = "" THEN 3560
  351. 3510  OPEN FILE$+".TXT" FOR OUTPUT AS #1
  352. 3520  FOR I = 1 TO 60
  353. 3530  PRINT #1,ARRAY$(I)
  354. 3540  NEXT I
  355. 3550  CLOSE #1
  356. 3560  SCREEN 0,0,PAGE,PAGE
  357. 3570  GOTO 550
  358. 3580  '
  359. 3590  IF K <> 38 THEN 3810                  ' Alt-L
  360. 3600  INSERT = 0
  361. 3610  SCREEN 0,0,LST,LST
  362. 3620  CLS
  363. 3630  FILES
  364. 3640  PRINT
  365. 3650  INPUT "File name for load ";FILE$
  366. 3660  IF FILE$ = "" THEN 3560
  367. 3670  ON ERROR GOTO 3940
  368. 3680  OPEN FILE$+".TXT" FOR INPUT AS #1
  369. 3690  ON ERROR GOTO 0
  370. 3700  FOR I = 1 TO 60
  371. 3710  IF NOT EOF(1) THEN LINE INPUT #1,ARRAY$(I) ELSE ARRAY$(I) = ""
  372. 3720  IF LEN(ARRAY$(I)) > 80 THEN ARRAY$(I) = LEFT$(ARRAY$(I),80)
  373. 3730  WHILE LEN(ARRAY$(I)) < 80
  374. 3740  ARRAY$(I) = ARRAY$(I) + SPACE$(80-LEN(ARRAY$(I)))
  375. 3750  WEND
  376. 3760  NEXT I
  377. 3770  CLOSE #1
  378. 3780  GOSUB 3840
  379. 3790  GOTO 500
  380. 3800  '
  381. 3810  SOUND 200,3                           ' no match found for k$
  382. 3820  GOTO 640
  383. 3830  '
  384. 3840  TLINE = 0                             ' Subroutine, string array to screen
  385. 3850  FOR APAGE = TOP TO BOT
  386. 3860  SCREEN 0,0,APAGE,APAGE
  387. 3870  FOR AROW = 2 TO 21
  388. 3880  TLINE = TLINE + 1
  389. 3890  LOCATE AROW,1,1,7,7
  390. 3900  PRINT ARRAY$(TLINE);
  391. 3910  NEXT AROW,APAGE
  392. 3920  RETURN
  393. 3930  '
  394. 3940  IF ERR <> 53 THEN 3970                ' Error trap for bad file name
  395. 3950  PRINT "File not found, try again"
  396. 3960  RESUME 3650
  397. 3970  ON ERROR GOTO 0
  398.